home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Forever 4
/
Atari Forever 4.zip
/
Atari Forever 4.iso
/
PD_THEMA
/
CLI
/
COMMAND.AMB
/
COMMAND.TXT
< prev
Wrap
Text File
|
1998-03-14
|
13KB
|
339 lines
GEYERSOFT präsentiert:
KOMMANDOSHELL der ">"-Art, MSDOS-ähnlich
Version 2.08
written by Wolfgang Ambrosch
Gregor Mendelstraße 11/2/25
A-2514 Traiskirchen
Tel. 02252/52 83 14
last update 23.12.88
Es handelt sich bei der vorliegenden Version noch nicht um die von mir
angestrebte Endversion, es können daher im Betrieb durchaus noch Fehler
auftreten (dafür ist die Shell Public-Domain und daher gratis!). Ich
fühle mich für jeden Fehler verantwortlich, hafte jedoch nicht für
etwaige Folgen. Den kommentierten Quelltext in C und Assembler gebe ich
auf Anfrage und eine entsrechende Spende gerne weiter.
Bemerkungen zur Entstehung:
Mit dem Erwerb einer Festplatte begann bei mir zunächst nicht das
goldene Zeitalter, sondern vor allem das Problem mit den vielen
Fenstern und Laufwerken. Anstatt drei Laufwerken standen nun 6 auf
meinem Desktop, und vor allem bei der Programmentwicklung waren die
wichtigen Tools auf mindestens drei Fenster aufgeteilt, die nach jedem
Programmlauf wieder neu aufgebaut werden mußten. Ein zusätzliches
Problem war die MEGAMAX-Graphic-Shell, deren ansonsten recht praktische
Fileselectorboxen nur Laufwerke bis F: kennen; meinen RAMDISK hat aber
leider die Bezeichnung G:.
Die Lösung dieser Probleme ist diese Shell, die sicher nicht "alles"
kann, dafür aber recht klein ist und so noch anderen Programmen sowie
einer großen Ramdisk Platz läßt. Geschrieben wurde sie eigentlich
hauptsächlich wegen des 'PATH'-Kommandos; alle anderen Features sind
nur deswegen vorhanden, damit ich nicht dauernd aussteigen und Dinge
doch noch im Desktop erledigen muß oder ständig gebrauchte Hilfen wie
"COPY" immer zuerst nachgeladen werden.
Wer's (etwa von UNIX oder MSDOS) noch nicht kennt, dem sei das Feeling,
das 'PATH' in Verbindung mit einer Festplatte bietet, einmal kurz
beschrieben:
Zum Beispiel sind beim Entwickeln von C-Programmen meine Sourcecodes
und Libraries wegen der Geschwindigkeit auf der Ramdisk G:, der
Compiler auf D:\COM, und diverse Utilities in C:\USR. Mit "PATH C:\
USR\;D:\COM\" weise ich die Shell an, ein eingetipptes Kommando
zunächst in der internen Kommandoliste und im momentanen Directory zu
suchen (was immer getan wird), sodann aber in C:\USR und, wenn das
Programm dort noch immer nicht zu finden ist, in D:\COM. Ohne ständig
in Fenstern wühlen zu müssen, habe ich damit alle Hilfsprogramme, die
in den angegebenen Directories vorhanden sind, ständig im Zugriff;
zudem kann die Pfadeliste ja noch erweitert werden.
Einige Features:
Batchfiles (*.BAT) mit Parameterersetzung ($0 - $9)
Es können *.PRG,*.TOS,*.TTP,*.BAT - Dateien gestartet werden
Auch GEM-Programme werden fehlerfrei gestartet
Aufrufen von Acessories (*.ACC) ist möglich.
Setzen von Suchpfaden ist möglich (PATH - Befehl)
Die Shell unterstützt "Output-Redirection"
Das File AUTOEXEC.BAT wird, wenn vorhanden, nach dem Start
automatisch geladen und ausgeführt
Eine History-Funktion ist eingebaut (die letzen eingetippten
Zeilen können mit den Tasten 'CURSOR UP' und 'CURSOR DOWN'
erreicht werden.
Argumente, die in Anführungszeichen (") eingeschlossen sind,
werden nicht geteilt (interessant z.B. bei ECHO)
Batch-Programme mit IF-ELSE-ENDIF sowie GOTO
Die Shell ist 'case-sensitive', d.h. Groß- und Kleinbuchstaben
werden unterschieden.
Zur Parameterersetzung
Werden einem Batch-Programm Parameter übergeben, so können diese mit
den symbolischen Bezeichnungen $1 - $9 angesprochen werden (es sind
also maximal 9 Parameter sinvoll - weitere werden ignoriert). Der
Bezeichner $0 bezieht sich auf den Namen des Kommandos.
Ein Beispiel: folgendes Batch-Programm (Extension .BAT) compiliert und
linkt ein Programm.
COMPILER $1.c
LINKER $1.o -o $1.tos
Wenn dieses Batch-Programm zum Beispiel 'CL' heißt, können sie folgende
Zeile eingeben:
CL test
Die Shell macht daraus:
COMPILER test.c
LINKER test.o -o test.tos
Zu den Environment-Variablen
Das 'Environment' ist eine Liste von Null-terminierten Strings, deren
Adresse jedem aufgerufenen Programm mitgegeben wird. Jeder String ist
von der Form 'NAME=IRGENDWAS', wobei 'NAME' der Name der betreffenden
Environmentvariablen ist, und 'IRGENDWAS' ihr Inhalt. Diese Variablen
können auch von der Shell aus genutzt werden. Nehmen wir an, sie
definieren eine Variable mit
set EDITOR=C:\USR\VI.PRG
Diese Variable wird Teil des Environments. Sie können nun den Editor
auch mit folgender Zeile erreichen:
$EDITOR
Die Shell macht daraus:
C:\USR\VI.PRG
und startet ihren Editor aus dem richtigen Verzeichnis (egal, wo sie
gerade sind). Sollte nach dem Variablennamen nicht mindestens in LeerÕ
zeichen oder das Zeilenende folgen, ist der Name zusätzlich mit runden
Klammern einzuschließen, in unserem Beispiel also $(EDITOR). Dieses
Feature kann viel Tipparbeit sparen - vergessen sie aber nicht, daß
Groß- und Kleinschreibung bei ihren Namen beachtet wird! Übrigens:
set EDITOR=
löscht den Eintrag "EDITOR" in der Environmentliste wieder.
Zur ALIAS-Kommandoersetzung
Ähnlich wie die Verwaltung der Environment-Variablen funktioniert die
Verwaltung der alias-Liste. Sie dient ebenfalls dazu, Tipparbeit zu
sparen, ersetzt aber, anders als die Variablen, nur das erste Wort in
einer Zeile durch einen beliebigen Text. Analog zum obigen Beispiel
können wir definieren:
alias EDITOR=C:\USR\VI.PRG
In der Zeile
EDITOR command.c
Wird nun der EDITOR durch C:\USR\VI.PRG ersetzt, und tatsächlich ausÕ
geführt wird dann die Zeile "C:\USR\VI.PRG command.c".
Zur Input/Output-Redirection
Manchmal kann es sehr praktisch sein, eine Ausgabe, zum Beispiel die
des "dir"-Befehles, nicht auf dem Bildschirm, sondern in einer Datei zu
haben. Dazu dient die "Redirection". Die Zeile
dir *.c >file
schreibt die Ausgabe von "dir" in das File "file". Auch das Anhängen an
ein bestehendes File ist möglich. Mit
dir *.h >>file
wird an das vorher angelegt File zusätzlich die Ausgabe des zweiten
"dir"-Befehles angehängt. Für die Druckerausgabe (an der parallelen
Schnittstelle) existiert der spezielle Filename PRN:. Auch mit manchen
externen Programmen funktioniert die Redirection. Für Experten: sie
funktioniert genau mit den Programmen, die die GEMDOS-Funktion Fwrite
(Nummer $40) verwenden.
Analoges gilt für die Eingabe:
ask <file
holt sich die gewünschte Eingabe aus dem File 'file'. Die
Input-Redirection wirkt auf Programme, die die GEMDOS-Funktion Fread
verwenden.
Batch-Programme mit if - else - endif und goto
Um Batch-Programme flexibel zu machen, habe ich auch die wichtigsten
Ablaufkontrollmechanismen eingebaut. Die Funktion des 'if'-Kommandos
ist einfach: Jedes Programm sollte einen Returncode zurückgeben,
genauso wie die eingebauten Funktionen. Wenn dieser 0 ist, wird
angenommen, daß das Programm fehlerfrei gelaufen ist, Werte ungleich 0
zeigen Fehler an. 'if' nimmt als Parameter ein beliebiges Kommando und
testet den Returncode. Bei 0 - also fehlerfreier Ausführung - werden
die Kommandozeilen unmittelbar nach dem 'if' ausgeführt, bei jedem
anderem Returncode sucht die Shell nach dem nächsten 'else' oder
'endif'. Danach wird die Ausführung in der Zeile nach dem 'else' oder
'endif' fortgesetzt. Geschachtelte 'if - else - endif' Konstrukte sind
ebenfalls möglich. Ein Beispiel:
if exist test.prg
echo "Programm vorhanden"
else
echo "Programm nicht vorhanden"
cc test.c -o test.prg
endif
Dieses kleine Batch-Programm schaut nach, ob ein Programm mit Namen
'test.prg' im aktuellen Directory vorhanden ist. Wenn ja, wird
'Programm vorhanden' ausgegeben, wenn nein, erscheint 'Programm nicht
vorhanden' auf dem Bildschirm und es wird aus dem Sourcecode
compiliert.
KOMMANDOLISTE
In der Kommandoliste gelten folgende Konventionen:
Klein geschriebene Worte sind "Terminalsymbole", d.h. in der Shell
genauso einzugeben.
Groß geschriebene Worte sind Variable, die bei Gebrauch durch andere
Namen (oder Zahlen...) zu ersetzen sind.
Argumente in eckigen Klammern ([,]) können weggelassen werden.
Argumente in geschweiften Klammern ({,}) dürfen mehrmals oder auch gar
nicht vorkommen.
acc NAME [MENU-ID]
ruft ein Acessory auf. NAME ist der Filename des Acessories ohne
Extension (bei "ABC.ACC" also nur "ABC"), "MENU-ID" ist die
Menü-Identifikation des Acessories, d.h. sein Platz in der
Desktop-Menüleiste. Sie wird von 0 weg gezählt, ihr Defaultwert ist 0,
sodaß die "menu-id" beim obersten Acessory weggelassen werden kann.
Nachdem das Acessory beendet wurde, nocheinmal mit der Maus klicken!
alias [ALIAS=SOMETHING]
definiert ein "Alias" (Beschreibung siehe oben) unter dem Namen
"alias". "alias" ohne Parameter gibt eine Liste der definierten Namen
aus.
ask [TEXT]
gibt den optionalen TEXT aus und wartet dann auf eine
Benutzereingabe. Bei "j","J","Y" oder "y" wird 0 retourniert, bei "N"
oder "n" 1. Jede andere Eingabe führt zur Wiederholung des Vorganges.
Ein Befehl für den Batchbetrieb, wo er in Verbindung mit if-then-else
recht praktisch ist.
cd [DRIVE:]PFAD
Change Directory. Wechselt den Defaultpfad
chmod [MODUS] PFAD
Wenn der optionale MODUS angegeben ist, wird das Fileattributbyte des
durch PFAD angegebenen Files gesetzt. Dabei wird MODUS als Oktalzahl
interpretiert. Wenn MODUS nicht angegeben ist, wird das
Fileattributbyte gelesen und ausgegeben.
cls
Löscht den Bildschirm
color NUMMER
NUMMER = 0: Weiße Schrift auf schwarzem Hintergrund
NUMMER = 1: Schwarze Schrift auf weißem Hintergrund
copy [DRIVE:]SOURCENAME [DRIVE:][TARGETPFAD\[TARGETNAME]]
kopiert SOURCE auf TARGET
del [DRIVE:]FILENAME {[DRIVE:]FILENAME}
löscht das angegebene File (Wildcards sind möglich).
dir [[DRIVE:]SCOPE] ["/w"]
zeigt das Directory an. Mit Switch "/W" werden nur die Filenamen
angezeigt.
echo on | off | TEXT
echo on/off schaltet die Kommandoausgabe im Batchbetrieb ein oder
aus. Die Defaulteinstellung ist off.
echo TEXT gibt den Text aus (wenn der Text länger als ein Wort ist,
muß er in Anführungszeichen gesetzt werden)
errorlevel ZAHL
Überprüft den zuletzt aufgetretenen Fehlercode. Ist er größer oder
gleich der ZAHL , wird 0 retourniert, ansonsten 1.
exist FILENAME
Überprüft, ob das angegebenen File vorhanden ist. Praktisch für den
Batchbetrieb.
if - else - endif
siehe oben
goto
siehe oben
map WILDCARD KOMMANDO
Expandiert WILDCARD. Ruft für jeden aus der Expansion erhaltenen Namen
KOMMANDO auf und führt dabei folgende Ersetzungen durch:
%@ wird ersetzt durch vollen Pfad, Filename und Extension
%B wird ersetzt durch Filename und Extension (ohne Pfad)
%P wird ersetzt durch Pfadname
%N wird ersetzt durch Filename, ohne Pfad und ohne Extension
%E wird ersetzt durch Extension, ohne Pfad und ohne Filenam
md [DRIVE:]PFAD
legt ein Subdirectory an
path [pfad]{";"pfad}
Zeigt ohne Argument die vorhandenen Suchpfade an. Mit Argument werden
die (durch Strichpukte getrennten) Pfade übernommen. Gesucht wird von
links nach rechts. Übrigens werden auch etwaige Resourcefiles von
Programmen in anderen als dem aktuellen Directory gefunden - eine
kleine Änderung im TRAP #1-Handler macht's möglich (Nebenwirkungen
nicht ausgeschlossen!).
pause [TEXT]
Gibt den TEXT (wenn vorhanden) aus und unterbricht die Ausführung
eines Batchfiles. Mit der Taste 'ESCAPE' kann die Ausführung
abgebrochen werden.
rd [DRIVE:]PFAD
löscht ein (leeres) Subdirectory
rd -r PFAD
löscht das angegebene Subdirectory und alle darin enthaltenen Files
und Directories.
ren NAME1 NAME2
benennt das File NAME1 in NAME2 um.
reverse
Tauscht Schreib- und Hintergrundfarbe gegeneinander aus.
seconds KOMMANDO
Gibt die für die Ausführung von KOMMANDO verbrauchte Zeit in
Zehntelsekunden an.
set [VAR=SOMETHING]
Fügt den Parameter an die Environmentliste an. Wenn der Variablenname
VAR schon vorhanden war, wird der alte Inhalt SOMETHING durch den neuen
Inhalt überschrieben. SET ohne Parameter gibt das Environment aus.
type NAME
Gibt das File NAME aus. Bei Druck von 'SPACE' oder 'CTRL-S' wird die
Ausgabe angehalten; bei Druck von 'CTRL-C' wird die Ausgabe
unterbrochen.
vol [DRIVE:]
zeigt Volume-Label (wenn vorhanden) und verfügbaren Speicherplatz auf
dem aktuellen oder angegebenen Laufwerk an.